package com.neusoft.hifly.core.pojo;

import java.io.Serializable;

import com.neusoft.hifly.commons.exception.SystemErrorException;

import io.swagger.annotations.ApiModelProperty;

/**
 * Title: 核心类库
 * <p>
 * Description: 统一的JSON格式数据响应类，为前后端分离做基础
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
public class ApiResponse<T> implements Serializable {

	private static final long serialVersionUID = 5323834681190764516L;

	// HTTP响应代码：200、404等
	@ApiModelProperty(value = "HTTP响应代码：0成功、-001系统异常、-002错误的请求参数、50008非法令牌、50014令牌过期")
	private int code;

	// 提示信息
	@ApiModelProperty(value = "提示信息")
	private String message;

	// 返回的数据
	@ApiModelProperty(value = "返回的数据")
	private T result;

	// 之后可以用这个值来换取新的 token，相当于刷新了Token有效时间
	@ApiModelProperty(value = "最新Token")
	private String refreshToken;

	/**
	 * 构造方法
	 */
	public ApiResponse() {
		super();
	}

	/**
	 * 构造方法
	 *
	 * @param code
	 *            响应代码
	 */
	public ApiResponse(final ApiCode code) {
		super();
		this.code = code.getCode();
		this.message = code.getMsg();
	}

	/**
	 * 构造方法
	 *
	 * @param code
	 *            响应代码
	 * @param result
	 *            返回的数据
	 */
	public ApiResponse(final ApiCode code, final T result) {
		super();
		this.code = code.getCode();
		this.message = code.getMsg();
		this.result = result;
	}

	/**
	 * 构造方法
	 *
	 * @param code
	 *            响应代码
	 */
	public ApiResponse(final int code) {
		super();
		this.code = code;
	}

	/**
	 * 构造方法
	 *
	 * @param code
	 *            响应代码
	 * @param message
	 *            提示信息
	 */
	public ApiResponse(final int code, final String message) {
		super();
		this.code = code;
		this.message = message;
	}

	/**
	 * 构造方法
	 *
	 * @param code
	 *            响应代码
	 * @param result
	 *            返回的数据
	 */
	public ApiResponse(final int code, final T result) {
		super();
		this.code = code;
		this.result = result;
	}

	/**
	 * 构造方法
	 *
	 * @param code
	 *            响应代码
	 * @param message
	 *            提示信息
	 * @param result
	 *            返回的数据
	 */
	public ApiResponse(final int code, final String message, final T result) {
		super();
		this.code = code;
		this.message = message;
		this.result = result;
	}

	/**
	 * 构造方法
	 *
	 * @param result
	 *            返回的数据
	 */
	public ApiResponse(final T result) {
		super();
		this.code = ApiCode.SUCCESS.getCode();
		this.message = ApiCode.SUCCESS.getMsg();
		this.result = result;
	}

	/**
	 * 构造方法
	 *
	 * @param e
	 *            错误信息
	 */
	public ApiResponse(final SystemErrorException e) {
		super();
		this.code = e.getErrorCode();
		if (this.code == 0) {
			this.code = ApiCode.Exception.getCode();
		}
		this.message = e.getErrorDesc();
	}

	public int getCode() {
		return code;
	}

	public void setCode(final int code) {
		this.code = code;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(final String message) {
		this.message = message;
	}

	public T getResult() {
		return result;
	}

	public void setResult(T result) {
		this.result = result;
	}

	public String getRefreshToken() {
		return refreshToken;
	}

	public void setRefreshToken(final String refreshToken) {
		this.refreshToken = refreshToken;
	}
}